home *** CD-ROM | disk | FTP | other *** search
/ Oh!X 2001 Spring / Oh!X 2001 Spring Special CD-ROM (Japan).7z / Oh!X 2001 Spring Special CD-ROM (Japan) (Track 1).bin / FBENC / TEC-FB^3.sea / TEC-FB^3 / TEC2.MAIN < prev    next >
Text File  |  2000-07-05  |  3KB  |  110 lines

  1. /*
  2. Text Encoding Converter Example #2
  3. Takaaki Mizuno(takaaki@cds.ne.jp)
  4. 2000.7.5
  5. */
  6.  
  7.  
  8. DIM xErr AS OSStatus
  9. DIM inputEncoding AS TextEncoding
  10. DIM outputEncoding AS TextEncoding
  11. DIM converter AS TECObjectRef
  12. DIM inputact AS ByteCount
  13. DIM outputact AS ByteCount
  14. DIM a$, b$
  15. DIM d AS BYTE
  16.  
  17. END GLOBALS
  18.  
  19. CLEAR LOCAL
  20. LOCAL FN FindBestEncoding&(string AS STR255)
  21. DIM err                    AS OSStatus
  22. DIM maxRegionEncodings     AS ItemCount
  23. DIM actualRegionEncodings  AS ItemCount
  24. DIM maxSnifferEncodings    AS ItemCount
  25. DIM actualSnifferEncodings AS ItemCount
  26. DIM regionEncodings        AS POINTER TO TextEncoding
  27. DIM snifferEncodings       AS POINTER TO TextEncoding
  28. DIM sniffer                AS TECSnifferObjectRef
  29. DIM errors                 AS POINTER TO ItemCount
  30. DIM features               AS POINTER TO ItemCount
  31. DIM loop                   AS INTEGER
  32. DIM loop2                  AS INTEGER
  33. DIM locale                 AS INTEGER
  34. DIM bestEncoding           AS TextEncoding
  35. DIM found                  AS BOOLEAN
  36.  
  37. locale = 14  //verJapan
  38.  
  39. err = FN TECCountWebTextEncodings(locale, @maxRegionEncodings)
  40. regionEncodings = 0
  41. regionEncodings = FN NewPtrClear (SIZEOF(TextEncoding) * maxRegionEncodings)
  42. LONG IF regionEncodings>0
  43. err = FN TECGetWebTextEncodings (locale, regionEncodings,maxRegionEncodings, @actualRegionEncodings)
  44. err = FN TECCountAvailableSniffers (@maxSnifferEncodings)
  45. snifferEncodings=0
  46. snifferEncodings = FN NewPtrClear (SIZEOF(TextEncoding) * maxSnifferEncodings)
  47. LONG IF snifferEncodings>0
  48. err = FN TECGetAvailableSniffers (snifferEncodings, maxSnifferEncodings, @actualSnifferEncodings)
  49. loop = 0
  50. WHILE loop < actualRegionEncodings
  51. found = _false
  52. FOR loop2 = 0 TO actualSnifferEncodings-1
  53. LONG IF [regionEncodings+(loop*SIZEOF(TextEncoding))] = [snifferEncodings+(SIZEOF(TextEncoding)*loop2)]
  54. found = _true
  55. EXIT FOR
  56. END IF
  57. NEXT
  58. LONG IF found>0
  59. INC(loop)
  60. XELSE
  61. actualRegionEncodings = actualRegionEncodings - 1
  62. & (regionEncodings+SIZEOF(TextEncoding)*loop) , [regionEncodings+(SIZEOF(TextEncoding)*actualRegionEncodings)]
  63. END IF
  64. WEND
  65.  
  66. LONG IF actualRegionEncodings = 0
  67. EXIT FN
  68. END IF
  69. err = FN TECCreateSniffer (@sniffer, regionEncodings, actualRegionEncodings)
  70. errors=0
  71. errors = FN NewPtrClear (SIZEOF(ItemCount) * actualRegionEncodings)
  72.  
  73. LONG IF errors>0
  74. features=0
  75. features = FN NewPtrClear (SIZEOF(ItemCount) * actualRegionEncodings)
  76. LONG IF features>0
  77. err = FN TECSniffTextEncoding (sniffer, @string+1, |@string|, regionEncodings, actualRegionEncodings, errors, actualRegionEncodings, features, actualRegionEncodings)
  78. bestEncoding = [regionEncodings]
  79. CALL DisposePtr (features)
  80. END IF
  81.  
  82. CALL DisposePtr (errors)
  83. END IF
  84. LONG if sniffer>0
  85. CALL TECDisposeSniffer(sniffer)
  86. END IF
  87. CALL DisposePtr (snifferEncodings)
  88.  
  89. END IF
  90. CALL DisposePtr (regionEncodings)
  91. END IF
  92. END FN=bestEncoding
  93.  
  94. WINDOW #1,"test"
  95.  
  96. a$ = "テスト文字列"
  97.  
  98. inputEncoding = FN FindBestEncoding&(a$)
  99. xErr = FN TECGetTextEncodingFromInternetName(@outputEncoding,"UTF-8")
  100. xErr = FN TECCreateConverter (@converter, inputEncoding, outputEncoding)
  101. xErr = FN TECConvertText (converter, @a$+1, |@a$|, @inputact,@b$+1,255, @outputact)
  102. xErr = FN TECDisposeConverter(converter)
  103.  
  104. d = outputact
  105. | @b$,d
  106. PRINT b$
  107. STOP
  108.  
  109.  
  110.